Skill

Flutter এর বেসিক কাঠামো

Mobile App Development - ফ্লাটার (Flutter)
352

Flutter এর বেসিক কাঠামো সম্পর্কে বিস্তারিতভাবে নিচে আলোচনা করা হলো। Flutter অ্যাপ মূলত Widget ভিত্তিক একটি আর্কিটেকচার অনুসরণ করে, যেখানে প্রতিটি UI উপাদান Widget হিসেবে উপস্থাপিত হয়। প্রতিটি অ্যাপের স্ট্রাকচার কিভাবে তৈরি হয় এবং বিভিন্ন অংশ কিভাবে কাজ করে তা বোঝার জন্য Flutter এর বেসিক কাঠামো বোঝা গুরুত্বপূর্ণ।

Flutter এর বেসিক কাঠামো:

১. Flutter অ্যাপের স্ট্রাকচার:

  • Flutter অ্যাপের স্ট্রাকচার সাধারণত main.dart ফাইলে থাকে, যা অ্যাপের এন্ট্রি পয়েন্ট হিসেবে কাজ করে।
  • একটি সাধারণ Flutter অ্যাপের কাঠামো নিচের মত হয়:
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final String title;

  MyHomePage({required this.title});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Text('Hello, Flutter!'),
      ),
    );
  }
}

২. Flutter অ্যাপের প্রধান উপাদান:

  • Widget:
    • Flutter অ্যাপের প্রতিটি অংশই Widget হিসেবে উপস্থাপিত হয়। Widget হলো অ্যাপ্লিকেশনের বিল্ডিং ব্লক।
    • Widget প্রধানত দুটি ধরনের হতে পারে:
      • Stateless Widget: যা স্থির (immutable) থাকে এবং এর স্টেট পরিবর্তন হয় না। এটি সাধারণত একবারই তৈরি হয়।
      • Stateful Widget: এটি স্টেটফুল হয় এবং এর স্টেট ডাইনামিক্যালি পরিবর্তন হতে পারে। এটি পুনরায় রেন্ডার হতে পারে, যখন তার স্টেট পরিবর্তন হয়।
  • MaterialApp:
    • MaterialApp হলো একটি রুট Widget যা পুরো অ্যাপকে Material Design গাইডলাইন অনুসরণ করে তৈরি করতে সাহায্য করে।
    • এটি সাধারণত থিম, রাউট, এবং অন্যান্য প্রপার্টি ধারণ করে এবং অ্যাপের মূল স্ট্রাকচার হিসেবে কাজ করে।
  • Scaffold:
    • Scaffold হলো Material Design এর প্রাথমিক স্ট্রাকচার প্রদানকারী Widget, যা অ্যাপের AppBar, Drawer, Bottom Navigation Bar, এবং Body এর মত বিভিন্ন UI উপাদান ধারণ করে।
  • AppBar:
    • AppBar হলো একটি টপ বারের মতো Widget যা অ্যাপের শিরোনাম, অ্যাকশন বাটন, এবং অন্যান্য তথ্য প্রদর্শন করে।
  • Body:
    • Body হলো অ্যাপের প্রধান কন্টেন্ট এলাকা যেখানে মূল UI উপাদান থাকে। এটি সাধারণত Center, Column, Row, বা Container এর মতো Widget ধারণ করে।
  • Center Widget:
    • Center Widget একটি কন্টেন্টকে স্ক্রিনের মাঝখানে অবস্থান করাতে সাহায্য করে। এটি সাধারণত টেক্সট, ইমেজ, বা অন্যান্য Widget ধারণ করে।

৩. Flutter অ্যাপের Widget ট্রি:

Flutter অ্যাপে প্রতিটি Widget একটি Widget ট্রি গঠন করে, যা Flutter এর অ্যাপ্লিকেশনের কাঠামো তৈরিতে ব্যবহৃত হয়। Widget ট্রি অনুযায়ী, প্রতিটি Widget এর একটি প্যারেন্ট এবং চাইল্ড Widget থাকে।

  • উদাহরণস্বরূপ:
    • MaterialApp মূল রুট Widget হিসেবে কাজ করে এবং তার চাইল্ড হিসেবে Scaffold থাকে।
    • Scaffold এর চাইল্ড হিসেবে AppBar এবং Body থাকে।
    • Body এর চাইল্ড হিসেবে Center এবং Center এর চাইল্ড হিসেবে Text থাকে।

৪. Flutter অ্যাপের লাইফ সাইকেল:

  • Flutter অ্যাপের লাইফ সাইকেল Stateless এবং Stateful Widget এর উপর নির্ভর করে। Stateless Widget এর লাইফ সাইকেল সরল, কারণ এটি একবারই তৈরি হয় এবং পরিবর্তন হয় না।
  • Stateful Widget এর লাইফ সাইকেল বেশি ডাইনামিক:
    • createState(): যখন একটি Stateful Widget তৈরি হয়, এটি প্রথমে createState() কল করে।
    • initState(): createState() এর পর initState() কল হয়, যা উইজেটটি ইনিশিয়ালাইজ করে।
    • build(): initState() এর পর build() কল হয়, যা UI রেন্ডার করে।
    • setState(): যখন স্টেট পরিবর্তন হয়, তখন setState() কল করে build() পুনরায় রেন্ডার হয়।

৫. Flutter এর থিম এবং স্টাইলিং:

  • Flutter অ্যাপে থিম এবং স্টাইলিং করতে ThemeData ব্যবহার করা হয়, যা MaterialApp এর প্রপার্টি হিসেবে সেট করা হয়। উদাহরণস্বরূপ:
MaterialApp(
  theme: ThemeData(
    primarySwatch: Colors.blue,
    textTheme: TextTheme(
      bodyText1: TextStyle(color: Colors.black),
    ),
  ),
);

Flutter এর বেসিক কাঠামো সংক্ষেপে:

  • Flutter অ্যাপ একটি Widget ট্রি আর্কিটেকচার অনুসরণ করে, যেখানে প্রতিটি UI উপাদান একটি Widget।
  • অ্যাপের প্রধান উপাদানগুলো হলো MaterialApp, Scaffold, AppBar, এবং Stateless ও Stateful Widget।
  • Stateless Widget স্থির, আর Stateful Widget পরিবর্তনশীল স্টেট ধারণ করতে পারে।
  • Widget ট্রি এবং Widget লাইফ সাইকেল অনুসরণ করে Flutter অ্যাপ তৈরি হয়।

এই বেসিক কাঠামো বুঝে Flutter ডেভেলপাররা সহজেই বিভিন্ন ধরনের UI এবং অ্যাপ্লিকেশন তৈরি করতে পারেন।

Content added By

Flutter অ্যাপ্লিকেশনের গঠন

404

Flutter অ্যাপ্লিকেশনের গঠন সাধারণত বেশ সংগঠিত এবং মডুলার হয়। Flutter-এ একটি অ্যাপ্লিকেশন তৈরি করতে প্রজেক্টের বিভিন্ন ফাইল এবং ডিরেক্টরি একটি নির্দিষ্ট কাঠামোতে থাকে, যা অ্যাপ্লিকেশনটির কার্যক্রম এবং রক্ষণাবেক্ষণ সহজ করে। Flutter অ্যাপ্লিকেশনের গঠন সম্পর্কে বিস্তারিত নিচে দেওয়া হলো:

Flutter অ্যাপ্লিকেশনের স্ট্যান্ডার্ড গঠন

Flutter অ্যাপ্লিকেশন তৈরির পর সাধারণত নিচের গঠনটি দেখা যায়:

my_app/
├── android/
├── ios/
├── lib/
│   ├── main.dart
├── test/
├── web/
├── build/
├── pubspec.yaml
├── pubspec.lock
├── README.md
└── .gitignore

ডিরেক্টরি এবং ফাইলের বিস্তারিত:

android/ এবং ios/:

  • এই ডিরেক্টরিগুলো Android এবং iOS এর জন্য নেটিভ কনফিগারেশন ফাইল এবং সোর্স কোড সংরক্ষণ করে। এখানে Android এর জন্য Gradle এবং iOS এর জন্য Xcode কনফিগারেশন থাকে।
  • যদি আপনি Flutter দিয়ে Android বা iOS অ্যাপ তৈরি করেন, তবে এই ফোল্ডারগুলো প্রয়োজনীয় বিল্ড এবং কনফিগারেশন পরিবর্তন করার জন্য ব্যবহৃত হয়।

lib/:

  • এই ডিরেক্টরিটি হল আপনার অ্যাপ্লিকেশনের মূল কোডবেস। এখানে সমস্ত Dart ফাইল থাকে, এবং অ্যাপ্লিকেশনের লগিক, UI, এবং অন্যান্য ফাংশনালিটি নির্ধারণ করা হয়।
  • main.dart ফাইলটি হলো অ্যাপ্লিকেশনের এন্ট্রি পয়েন্ট। এখানে main() ফাংশন থাকে, যা অ্যাপ্লিকেশন চালু করে।

test/:

  • এখানে আপনার অ্যাপ্লিকেশনের টেস্ট ফাইল থাকে। Flutter-এ টেস্টিং অনেক গুরুত্বপূর্ণ, এবং এই ফোল্ডারটি ব্যবহার করে ডেভেলপাররা তাদের অ্যাপের বিভিন্ন ইউনিট এবং উইজেট টেস্ট করতে পারে।
  • Dart এর flutter_test প্যাকেজ ব্যবহার করে এখানে টেস্ট লেখা হয়।

web/:

  • এই ডিরেক্টরিটি Flutter এর ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। এখানে ওয়েব সংক্রান্ত কনফিগারেশন এবং ফাইল থাকে, যেমন index.html
  • এটি Flutter ওয়েব অ্যাপ্লিকেশন রেন্ডারিং এবং কনফিগারেশনের জন্য গুরুত্বপূর্ণ।

build/:

  • এই ডিরেক্টরিটি Flutter অ্যাপ্লিকেশন বিল্ড করার পর তৈরি হয় এবং বিল্ড ফাইল সংরক্ষণ করে। এটি অ্যাপের APK, IPA, বা ওয়েব ফাইল রাখার জন্য ব্যবহৃত হয়।
  • এই ফোল্ডারটি সাধারণত স্বয়ংক্রিয়ভাবে তৈরি এবং আপডেট হয়।

pubspec.yaml:

  • এই ফাইলটি Flutter প্রজেক্টের একটি গুরুত্বপূর্ণ কনফিগারেশন ফাইল। এখানে প্রজেক্টের ডিপেন্ডেন্সি, অ্যাসেটস, প্যাকেজ, এবং অন্যান্য কনফিগারেশন উল্লেখ করা হয়।
  • উদাহরণ:
  • এখানে ডিপেন্ডেন্সি যোগ করা, অ্যাসেট ফাইল যোগ করা এবং অন্যান্য সেটিংস করা হয়।
name: my_app
description: A new Flutter project
version: 1.0.0+1

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true
  assets:
    - assets/images/

pubspec.lock:

  • এটি pubspec.yaml এর ওপর ভিত্তি করে তৈরি হয় এবং নির্দিষ্ট ডিপেন্ডেন্সিগুলোর ভার্সন সংরক্ষণ করে। যখন আপনি flutter pub get চালান, এটি ডিপেন্ডেন্সি আপডেট করে এবং সেই অনুযায়ী লক ফাইল আপডেট করে।

README.md:

  • এটি প্রজেক্টের বিবরণ, ব্যবহার নির্দেশিকা, এবং অন্যান্য তথ্য রাখার জন্য ব্যবহৃত হয়। সাধারণত এটি প্রজেক্টের শুরুতে ডেভেলপার বা ব্যবহারকারীদের জন্য গাইড হিসেবে কাজ করে।

.gitignore:

  • এই ফাইলটি গিটের মাধ্যমে কোন কোন ফাইল বা ডিরেক্টরি ভার্সন কন্ট্রোলে অন্তর্ভুক্ত হবে না তা নির্ধারণ করে। সাধারণত বিল্ড ফোল্ডার এবং কনফিগারেশন ফাইলগুলো .gitignore এ উল্লেখ করা হয়।

Flutter অ্যাপ্লিকেশনের মূল ফাইল: main.dart

lib/main.dart ফাইলটি Flutter অ্যাপ্লিকেশনের এন্ট্রি পয়েন্ট, যা প্রথম চালানো হয়। এই ফাইলটি Flutter এর উইজেট ট্রি তৈরি করে এবং অ্যাপ্লিকেশনটির স্ট্রাকচার এবং ডিজাইন সংজ্ঞায়িত করে।

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Home Page'),
        ),
        body: Center(
          child: Text('Hello, Flutter!'),
        ),
      ),
    );
  }
}

Flutter অ্যাপ্লিকেশনের গঠনের বৈশিষ্ট্য

  • মডুলার স্ট্রাকচার: Flutter প্রজেক্টটি মডুলার হয় এবং বিভিন্ন কোডকে সহজেই বিভিন্ন ফোল্ডারে বিভক্ত করা যায়, যেমন models, views, controllers ইত্যাদি।
  • মাল্টি-প্ল্যাটফর্ম সাপোর্ট: Android, iOS, web, এবং desktop এর জন্য আলাদা আলাদা কনফিগারেশন এবং ডিরেক্টরি আছে।
  • সহজ কনফিগারেশন: pubspec.yaml এর মাধ্যমে খুব সহজেই অ্যাপের ডিপেন্ডেন্সি এবং অ্যাসেট ম্যানেজ করা যায়।

Flutter অ্যাপ্লিকেশনের এই স্ট্রাকচার ডেভেলপারদের জন্য কোড সংগঠিত করা, রক্ষণাবেক্ষণ, এবং নতুন ফিচার যোগ করা সহজ করে তোলে।

Content added By

Flutter এর Widget Tree এবং Widget গঠন

442

Flutter এ Widget Tree এবং Widget গঠন নিয়ে বিস্তারিত আলোচনা নিচে করা হলো। Flutter অ্যাপ্লিকেশনের মূল ভিত্তি হলো Widget, এবং Widget Tree দ্বারা অ্যাপের UI কাঠামো তৈরি করা হয়। প্রতিটি Widget একে অপরের সাথে সম্পর্কিত হয়ে একটি ট্রি (গাছের) আকারে সংগঠিত হয়, যাকে Widget Tree বলা হয়। এটি Flutter এর UI রেন্ডারিং এবং বিল্ড প্রসেসে গুরুত্বপূর্ণ ভূমিকা পালন করে।

Widget Tree কী?

  • Widget Tree হলো একটি গঠন, যেখানে প্রতিটি UI উপাদান বা Widget একটি ট্রি স্ট্রাকচারে অবস্থান করে। Flutter এ প্রতিটি Widget এর একটি প্যারেন্ট Widget এবং এক বা একাধিক চাইল্ড Widget থাকতে পারে।
  • Widget Tree সাধারণত একটি Root Widget দিয়ে শুরু হয়, যা অ্যাপ্লিকেশনের মূল কাঠামো গঠন করে এবং এর ভেতরে অন্যান্য Widget থাকে।

Widget Tree এর উদাহরণ:

Flutter এ একটি সাধারণ Widget Tree এর উদাহরণ নিচে দেওয়া হলো:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Widget Tree'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Hello, World!'),
              ElevatedButton(
                onPressed: () {},
                child: Text('Press Me'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

এই উদাহরণে Widget Tree এর গঠন কেমন তা নিচে ব্যাখ্যা করা হলো:

  1. MyApp: এই Widget হলো অ্যাপ্লিকেশনের Root Widget। এটি একটি StatelessWidget এবং এটি MaterialApp Widget কে রিটার্ন করে।
  2. MaterialApp: এটি একটি প্রধান Wrapper Widget যা অ্যাপের থিম, রাউটিং এবং অন্যান্য সেটিংস ধারণ করে। এটি মূলত Android এবং iOS এর Material Design অনুযায়ী UI প্রদান করে।
  3. Scaffold: MaterialApp এর মধ্যে Scaffold Widget রয়েছে, যা অ্যাপ্লিকেশনের প্রাথমিক কাঠামো তৈরি করে। এটি অ্যাপের AppBar, Drawer, Body ইত্যাদি ধারণ করতে ব্যবহৃত হয়।
  4. AppBar: Scaffold এর একটি উপাদান, যা টপে একটি টাইটেল বা অ্যাকশন বাটন প্রদর্শন করে।
  5. Center: এটি একটি Widget যা তার চাইল্ডকে স্ক্রিনের মাঝখানে অবস্থান করায়।
  6. Column: Center এর চাইল্ড হিসেবে একটি Column Widget ব্যবহার করা হয়েছে, যা লম্বালম্বিভাবে একাধিক Widget ধারণ করে।
  7. Text এবং ElevatedButton: Column এর চাইল্ড হিসেবে Text এবং ElevatedButton Widget গুলো রাখা হয়েছে, যা একসাথে একটি UI উপাদান তৈরি করেছে।

Widget গঠন (Structure of Widgets):

Flutter এ প্রতিটি UI উপাদান একটি Widget হিসেবে উপস্থাপিত হয়। Widgets সাধারণত দুই ধরনের হয়:

  • StatelessWidget: এটি একটি Stateless (অপরিবর্তনীয়) Widget, যার স্টেট পরিবর্তন হয় না। এটি সাধারণত স্থির UI উপাদান তৈরি করতে ব্যবহৃত হয়।
  • StatefulWidget: এটি একটি Stateful (পরিবর্তনশীল) Widget, যার স্টেট পরিবর্তন হতে পারে। এটি ডাইনামিক UI উপাদান তৈরি করতে ব্যবহৃত হয়, যেখানে ইউজারের ইন্টারঅ্যাকশন বা অ্যাপ্লিকেশনের পরিবর্তনের উপর ভিত্তি করে UI পরিবর্তিত হয়।

StatelessWidget এর উদাহরণ:

class MyStatelessWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text('I am a Stateless Widget');
  }
}
  • এই Widget এর স্টেট একবার তৈরি হলে তা আর পরিবর্তন হয় না।

StatefulWidget এর উদাহরণ:

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('Counter: $_counter'),
        ElevatedButton(
          onPressed: _incrementCounter,
          child: Text('Increment'),
        ),
      ],
    );
  }
}
  • এই Widget এ _counter নামক একটি স্টেট রয়েছে, যা ইউজারের ক্লিকের মাধ্যমে পরিবর্তিত হয়। setState() মেথডের মাধ্যমে Flutter জানানো হয় যে, স্টেট পরিবর্তিত হয়েছে এবং UI পুনরায় রেন্ডার করা হবে।

Widget Tree এবং Build Process:

  • Flutter এ প্রতিটি Widget build() মেথড ব্যবহার করে UI তৈরি করে। যখন কোনো Widget এর স্টেট পরিবর্তন হয়, তখন build() মেথড পুনরায় কল হয়ে Widget Tree আপডেট করে।
  • Widget Tree অ্যাপ্লিকেশনের UI কাঠামোকে নির্ধারণ করে এবং প্রতিটি Widget এর সম্পর্ক এবং তাদের মধ্যে কিভাবে ইন্টারঅ্যাকশন হবে তা ঠিক করে।

Widget Tree এর গুরুত্বপূর্ণ বৈশিষ্ট্য:

  1. Parent-Child Relationship: প্রতিটি Widget Tree এ Parent-Child সম্পর্ক থাকে, যেখানে একটি Widget এর চাইল্ড অন্য Widget হয়।
  2. Composition-Based Architecture: Flutter এ Widgets কম্পোজিশন আর্কিটেকচারের ওপর ভিত্তি করে কাজ করে। আপনি ছোট ছোট Widgets একত্রিত করে বড় এবং জটিল Widgets তৈরি করতে পারেন।
  3. Reusability: Flutter এ Widgets রিইউজেবল, যার মানে একটি Widget বিভিন্ন স্থানে পুনরায় ব্যবহার করা যায়। এটি কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
  4. Immutable Stateless Widgets: StatelessWidget গুলো Immutable, যার মানে তারা একবার তৈরি হলে পরিবর্তিত হয় না।
  5. Dynamic Stateful Widgets: StatefulWidget গুলো Dynamic, যার মানে তাদের স্টেট পরিবর্তন হতে পারে এবং UI অনুযায়ী রিফ্রেশ হয়।

Flutter এর Widget গঠন সংক্ষেপে:

  • Widget Tree: Flutter এ প্রতিটি UI উপাদান একটি Widget হিসেবে গঠিত হয় এবং এটি একটি ট্রি স্ট্রাকচারে সংগঠিত থাকে।
  • StatelessWidget: পরিবর্তনহীন এবং স্থির UI তৈরি করতে ব্যবহৃত হয়।
  • StatefulWidget: পরিবর্তনশীল এবং ডাইনামিক UI উপাদান তৈরি করতে ব্যবহৃত হয়, যেখানে ইউজারের ইন্টারঅ্যাকশন বা অ্যাপ্লিকেশনের আপডেট অনুসারে স্টেট পরিবর্তিত হয়।

Flutter এ Widget Tree এবং Widget গঠনের ধারণা বুঝে, আপনি উন্নত এবং কার্যকর UI তৈরি করতে পারবেন।

Content added By

Stateless এবং Stateful Widgets এর মধ্যে পার্থক্য

370

Flutter এ Stateless Widget এবং Stateful Widget হলো দুটি প্রধান Widget টাইপ, যেগুলোর মধ্যে পার্থক্য মূলত স্টেট পরিচালনার উপরে ভিত্তি করে। Flutter অ্যাপে UI তৈরি করতে এই Widget গুলো ব্যবহৃত হয়। নিচে Stateless এবং Stateful Widget এর মধ্যে পার্থক্য এবং এদের বৈশিষ্ট্য আলোচনা করা হলো:

Stateless Widget:

  • সংজ্ঞা: Stateless Widget হলো এমন একটি Widget, যেটি কোনো পরিবর্তনশীল স্টেট ধারণ করে না। এটি একবারই তৈরি হয় এবং এর UI স্থির (immutable) থাকে।
  • বৈশিষ্ট্য:
    • এটি কোনো ডাইনামিক ডেটা বা স্টেট ম্যানেজ করে না।
    • একবার build() মেথড কল হলে, এর ভিউ অপরিবর্তিত থাকে যতক্ষণ না পর্যন্ত Widget ট্রীতে কোনো আপডেট হয়।
    • সাধারণত নির্দিষ্ট বা ফিক্সড UI উপাদান তৈরি করতে ব্যবহৃত হয়।
  • কোড উদাহরণ:
    • উপরে দেয়া কোডে, MyStatelessWidget একটি Stateless Widget, যা স্ক্রিনে একটি স্থির টেক্সট প্রদর্শন করে।
import 'package:flutter/material.dart';

class MyStatelessWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Stateless Widget Example'),
      ),
      body: Center(
        child: Text('This is a Stateless Widget'),
      ),
    );
  }
}

Stateful Widget:

  • সংজ্ঞা: Stateful Widget হলো এমন একটি Widget, যেটি পরিবর্তনশীল স্টেট ধারণ করে এবং যখনই এর স্টেট পরিবর্তিত হয়, তখন এটি পুনরায় রেন্ডার হয়।
  • বৈশিষ্ট্য:
    • এটি ডাইনামিক ডেটা বা স্টেট ম্যানেজ করতে পারে এবং স্টেট পরিবর্তনের উপর ভিত্তি করে UI আপডেট করে।
    • StatefulWidget দুটি অংশে বিভক্ত: StatefulWidget ক্লাস এবং এর সাথে সম্পর্কিত State ক্লাস।
    • setState() মেথড ব্যবহার করে Widget এর স্টেট পরিবর্তন করা যায় এবং নতুন স্টেট অনুযায়ী UI আপডেট হয়।
  • কোড উদাহরণ:
    • উপরে দেয়া কোডে, MyStatefulWidget একটি Stateful Widget, যা একটি কাউন্টার ধারণ করে। যখন বাটন চাপা হয়, তখন _incrementCounter মেথড কল হয়, এবং setState() মেথড ব্যবহার করে _counter মান বৃদ্ধি করে। এর ফলে, UI পুনরায় রেন্ডার হয় এবং আপডেটেড মান দেখানো হয়।
import 'package:flutter/material.dart';

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Stateful Widget Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Button pressed this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

Stateless এবং Stateful Widget এর মধ্যে পার্থক্য:

বৈশিষ্ট্যStateless WidgetStateful Widget
স্টেট ম্যানেজমেন্টস্টেট ম্যানেজ করে না, স্থির থাকেপরিবর্তনশীল স্টেট ধারণ করতে পারে এবং আপডেট হয়
বিল্ড মেথডএকবার build() কল হয়ে স্থির UI তৈরি করেস্টেট পরিবর্তনের সময় build() পুনরায় কল হয়
ব্যবহারফিক্সড UI উপাদান যেমন টেক্সট, ইমেজ, বাটনডাইনামিক UI উপাদান যেমন কন্ট্রোল, ইনপুট ফিল্ড
প্রয়োজনীয়তাযদি UI পরিবর্তন না হয়, তখন Stateless Widget যথেষ্টযদি UI ডাইনামিক বা স্টেট-নির্ভর হয়, Stateful Widget প্রয়োজনীয়

কখন Stateless এবং Stateful Widget ব্যবহার করবেন:

  • Stateless Widget: যখন UI কন্টেন্ট স্থির থাকে এবং এর কোনো পরিবর্তন নেই, তখন Stateless Widget ব্যবহার করা হয়। উদাহরণস্বরূপ, যদি আপনি একটি নির্দিষ্ট টেক্সট বা ইমেজ প্রদর্শন করতে চান যা পরিবর্তিত হবে না।
  • Stateful Widget: যখন UI ডাইনামিক বা পরিবর্তনশীল তথ্যের উপর ভিত্তি করে তৈরি হয়, তখন Stateful Widget ব্যবহার করা হয়। উদাহরণস্বরূপ, যদি আপনি একটি ফর্ম বা কাউন্টার তৈরি করতে চান যা ব্যবহারকারীর ইন্টারেকশন অনুযায়ী পরিবর্তিত হয়।

এই পার্থক্যগুলো বুঝে Flutter ডেভেলপাররা কোন পরিস্থিতিতে কোন Widget ব্যবহার করবেন তা নির্ধারণ করতে পারেন।

Content added By

MaterialApp এবং CupertinoApp এর ব্যবহার

293

Flutter-এ MaterialApp এবং CupertinoApp হলো দুটি ভিন্ন ধরনের অ্যাপ্লিকেশন উইজেট, যা Flutter অ্যাপ্লিকেশনের জন্য প্ল্যাটফর্ম-নির্ভর UI ডিজাইন করতে ব্যবহৃত হয়। MaterialApp মূলত Android এবং Material Design এর জন্য ব্যবহৃত হয়, যেখানে CupertinoApp iOS এর জন্য Cupertino স্টাইল ব্যবহার করে। নিচে এই দুটি উইজেটের বিস্তারিত ব্যবহার এবং পার্থক্য আলোচনা করা হলো।

1. MaterialApp

MaterialApp উইজেটটি Flutter এর Material Design থিম এবং উইজেটগুলির জন্য ব্যবহৃত হয়। এটি Android অ্যাপ্লিকেশনের জন্য উপযুক্ত এবং Google এর Material Design নির্দেশিকা অনুসরণ করে।

MaterialApp এর বৈশিষ্ট্য

  • Material Design সাপোর্ট: MaterialApp-এ Flutter এর Material Design এর সমস্ত কম্পোনেন্ট (যেমন AppBar, FloatingActionButton, Drawer, BottomNavigationBar) ব্যবহার করা যায়।
  • থিমিং সাপোর্ট: অ্যাপ্লিকেশনের জন্য কাস্টম থিম সেট করতে পারবেন (যেমন প্রাইমারি কালার, অ্যাকসেন্ট কালার, টেক্সট স্টাইল ইত্যাদি)।
  • নেভিগেশন এবং রুটিং: MaterialApp-এ নেভিগেশন এবং রুটিং সহজে ম্যানেজ করা যায়।
  • আন্তর্জাতিককরণ (i18n): MaterialApp আন্তর্জাতিককরণ এবং লোকালাইজেশনের জন্য ইন-বিল্ট সাপোর্ট প্রদান করে।

MaterialApp এর উদাহরণ

import 'package:flutter/material.dart';

void main() {
  runApp(MyMaterialApp());
}

class MyMaterialApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Material App Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Home Page'),
        ),
        body: Center(
          child: Text('Hello, MaterialApp!'),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {},
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

MaterialApp এর গুরুত্বপূর্ণ প্রপার্টি

  • title: অ্যাপ্লিকেশনের শিরোনাম নির্ধারণ করে।
  • theme: অ্যাপ্লিকেশনের থিম সেট করতে ব্যবহৃত হয়।
  • home: অ্যাপ্লিকেশনের প্রাথমিক (প্রথম) স্ক্রিন বা পৃষ্ঠা।
  • routes: অ্যাপ্লিকেশনের বিভিন্ন রুট বা পেজের মেপিং সংরক্ষণ করে, যা নেভিগেশনের জন্য ব্যবহৃত হয়।
  • initialRoute: অ্যাপ্লিকেশনের প্রথমে কোন রুট দেখানো হবে তা নির্ধারণ করে।
  • locale: অ্যাপ্লিকেশনের ভাষা সেট করে।

2. CupertinoApp

CupertinoApp উইজেটটি iOS এর জন্য Cupertino ডিজাইন নির্দেশিকা অনুসরণ করে। এটি iOS-স্টাইলের অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয় এবং Apple এর ডিজাইন ফিলোসফি অনুসরণ করে।

CupertinoApp এর বৈশিষ্ট্য

  • Cupertino ডিজাইন সাপোর্ট: CupertinoApp-এ Flutter এর Cupertino উইজেট (যেমন CupertinoNavigationBar, CupertinoButton, CupertinoTabBar) ব্যবহার করা যায়।
  • iOS থিম: এটি iOS এর জন্য স্টাইল করা থিম এবং উইজেট প্রদান করে, যা ব্যবহারকারীদের জন্য iOS-সদৃশ অভিজ্ঞতা তৈরি করে।
  • নেভিগেশন এবং রুটিং: MaterialApp এর মতো CupertinoApp-এও নেভিগেশন এবং রুটিং ম্যানেজ করা যায়।
  • অ্যানিমেশন: iOS-স্টাইল অ্যানিমেশন এবং ট্রানজিশন সাপোর্ট করে, যা iOS এর সাথে সামঞ্জস্যপূর্ণ।

CupertinoApp এর উদাহরণ

import 'package:flutter/cupertino.dart';

void main() {
  runApp(MyCupertinoApp());
}

class MyCupertinoApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      title: 'Cupertino App Example',
      home: CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: Text('Home Page'),
        ),
        child: Center(
          child: Text('Hello, CupertinoApp!'),
        ),
      ),
    );
  }
}

CupertinoApp এর গুরুত্বপূর্ণ প্রপার্টি

  • title: অ্যাপ্লিকেশনের শিরোনাম নির্ধারণ করে।
  • theme: iOS-স্টাইল থিম সেট করতে ব্যবহৃত হয় (যদিও এটি MaterialApp এর মতো থিমিং সাপোর্ট দেয় না)।
  • home: প্রাথমিক স্ক্রিন বা পৃষ্ঠা, যা CupertinoPageScaffold বা অন্য Cupertino উইজেটের মাধ্যমে ডিফাইন করা হয়।
  • routes: বিভিন্ন পৃষ্ঠার মেপিং সংরক্ষণ করে, নেভিগেশনের জন্য ব্যবহৃত হয়।
  • locale: অ্যাপ্লিকেশনের ভাষা এবং লোকাল সেটিংস নির্ধারণ করে।

MaterialApp এবং CupertinoApp এর পার্থক্য

বৈশিষ্ট্যMaterialAppCupertinoApp
ডিজাইনMaterial Design (Android-স্টাইল)Cupertino Design (iOS-স্টাইল)
উইজেটসMaterial উইজেটস (AppBar, Button ইত্যাদি)Cupertino উইজেটস (NavigationBar, Button ইত্যাদি)
থিমিংMaterial থিমিং সাপোর্টসীমিত থিমিং সাপোর্ট, প্রধানত iOS স্টাইল
নেভিগেশন এবং রুটিংনেভিগেশন এবং রুটিং সাপোর্টনেভিগেশন এবং রুটিং সাপোর্ট
অ্যানিমেশনMaterial অ্যানিমেশনiOS-স্টাইল অ্যানিমেশন সাপোর্ট
আন্তর্জাতিককরণসহজেই আন্তর্জাতিককরণ (i18n) সাপোর্ট করেআন্তর্জাতিককরণ (i18n) সাপোর্ট করে

কোনটি বেছে নেবেন?

  • যদি আপনি Android বা Material Design অ্যাপ্লিকেশন তৈরি করতে চান, তবে MaterialApp ব্যবহার করা উচিত।
  • যদি আপনি iOS-এর জন্য বিশেষ করে অ্যাপ্লিকেশন তৈরি করতে চান, তবে CupertinoApp বেছে নেওয়া উচিত।

আশা করি, MaterialApp এবং CupertinoApp সম্পর্কে এই আলোচনা আপনাকে Flutter অ্যাপ্লিকেশনের জন্য সঠিক উইজেট বেছে নিতে সাহায্য করবে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...